﻿/**
 * @file viewdatarefnodeadapter.h
 * @author huangxb
 * @email 18228033207@163.com
 * @date 2024.04.24
 * @license MIT License
 * @brief 视图数据引用节点适配器.
 * @details 外部自定义数据类型继承该适配器并将自定义数据适配为Node
 * 视图控制器用Node管理数据
 *
 * @htmlonly
 * <span style="font-weight: bold">History</span>
 * @endhtmlonly
 * Version|Auther|Date|Describe
 * ------|----|------|--------
 * V1.0|huangxb|2024.04.24|创建
 */
#ifndef VIEWDATAREFNODEADAPTER_H
#define VIEWDATAREFNODEADAPTER_H

/* 库头文件 */
#include <memory>

class CViewDataRefNode;

/** @brief 视图数据引用节点适配器. */
class CViewDataRefNodeAdapter
{
private:
    std::shared_ptr<CViewDataRefNode> m_spInvisibleViewDataRefNode; /**< 根节点，该节点不可见，用于统一管理列表型数据和树类型数据 */

protected:
    /** @brief 构造函数. */
    CViewDataRefNodeAdapter();

    /** @brief 虚析构函数，保证能正确析构子类. */
    virtual ~CViewDataRefNodeAdapter() = default;

    /**
     * @brief 获取根节点，用于子类初始化数据时将数据添加到根节点上.
     * @return 根节点
     */
    virtual std::shared_ptr<CViewDataRefNode> GetInvisibleViewDataRefNode() final;

    /**
     * @brief 初始化数据交给子类完成.
     * @return 成功 or 失败
     */
    virtual bool InitViewDataRefNode() = 0;
};

#endif // VIEWDATAREFNODEADAPTER_H
